import time
from datetime import datetime

# 假设一些初始状态
current_temperature = 20  # 水箱当前温度
current_water_level = 1  # 水量传感器，1代表有水，0代表无水
power_on = False  # 继电器电源状态，False表示关闭，True表示打开
is_heating = False  # 是否在加热
maintenance_needed = False  # 是否需要维修

# 模拟的状态图（简化为一个温度范围）
temperature_range = list(range(20, 101))

# 打开继电器电源
def turn_on_power():
    global power_on
    power_on = True
    print("继电器电源已开启，开始加热水箱。")

# 关闭继电器电源
def turn_off_power():
    global power_on
    power_on = False
    print("继电器电源已关闭，停止加热。")

# 检查是否进入休眠模式
def check_sleep_mode():
    current_time = datetime.now()
    if current_time.hour == 23 and current_time.minute == 0:
        enter_sleep_mode()
    elif current_time.hour == 7 and current_time.minute == 0:
        wake_up_and_start_heating()

# 进入休眠状态
def enter_sleep_mode():
    global power_on
    power_on = False
    print("现在是晚上11点，自动进入休眠模式，电源已关闭。")

# 早上7点唤醒并开始加热过程
def wake_up_and_start_heating():
    global power_on
    print("早上7点，自动进入恒温烧水过程。")
    if current_temperature < 20 and current_water_level == 1:
        turn_on_power()

# 温度升高模拟
def increase_temperature():
    global current_temperature
    if power_on and current_temperature < 100:
        current_temperature += 1
        print(f"水箱温度：{current_temperature}°C")
        time.sleep(0.1)  # 模拟加热过程

# 检查温度传感器
def check_temperature():
    global current_temperature
    if current_temperature >= 100:
        print(f"水箱温度达到100°C，关闭电源。")
        turn_off_power()

# 检查水量传感器
def check_water_level():
    global current_water_level
    if current_water_level == 0:
        print("水箱无水，无法开始加热。")
        turn_off_power()
    elif current_temperature < 20:
        print("水箱温度低于20°C，开始加热。")
        turn_on_power()

# 进行维修
def repair_tank():
    global maintenance_needed
    print("水箱损坏，需要维修。")
    maintenance_needed = True

# 主控制逻辑
def main():
    global current_temperature, power_on, maintenance_needed
    
    while True:
        if maintenance_needed:
            print("正在维修水箱...")
            # 模拟维修过程
            time.sleep(5)  # 假设维修时间是5秒
            maintenance_needed = False
            print("水箱已维修完毕。")
            current_temperature = 20  # 修复后的水箱温度
            continue
        
        # 检查时间是否需要进入休眠模式或唤醒
        check_sleep_mode()

        # 检查水量传感器和温度传感器
        check_water_level()
        check_temperature()
        
        # 模拟温度的增加过程
        increase_temperature()

        # 每隔1秒检查一次
        time.sleep(1)

# 启动程序
if __name__ == "__main__":
    main()
